package com.gitee.feizns.quickstart.jackson.annotation;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gitee.feizns.quickstart.jackson.serializer.JsonArrayAsObjectSerializer;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 这个注解主要是用于对集合（Collection）和数组（Object[]）属性
 * 类的属性上：将数组中的元素作为对象的某个属性来序列化
 * <pre>{@code
 *  {
 *      "roles":[
 *          {"id":1, "name":"超级管理员"},
 *          {"id":2, "name":"普通管理员"}
 *      ]
 *  }
 *  //将会转换为 ↓↓↓
 *  {
 *      "roles": {
 *          "1":{"id":1, "name":"超级管理员"},
 *          "2":{"id":2, "name":"普通管理员"}
 *      }
 *  }
 * }</pre>
 * @author feizns
 * @since 2023/04/02
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = JsonArrayAsObjectSerializer.class)
public @interface JsonArrayAsObject {

    /**
     * 作为key键属性名
     * @return {@link String}
     */
    String key();

    /**
     * 作为value属性名（默认使用原对象）
     * @return {@link String}
     */
    String value() default "";

}
